## 实验十七  SK6812 RGB模块

## ![img](./media/wps187.png)

**实验说明**

前面我们学习了插件RGB模块，利用PWM信号对模块的三个引脚进行调色。我们这个套价中，还有一个Keyes DIY电子积木 6812 RGB模块，但是这个SK6812 RGB 模块驱动原理不与我们前面学习过的插件RGB模块相同，而且只需要一个引脚就能控制，这是一个集控制电路与发光电路于一体的智能外控LED光源。每个LED原件其外型与一个5050LED灯珠相同，每个元件即为一个像素点，我们这个模块上有四个灯珠即四个像素，

实验中，我们分别使不同的灯亮出不同的颜色。

 

**实验原理**

从原理图中我们可以看出，这四个像素点灯珠都是串联起来的，其实不论多少个，我们都可以用一个引脚控制任一一个灯，并且让它显示任一种颜色。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路，还包含有高精度的内部振荡器和12V高压可编程定电流控制部分，有效保证了像素点光的颜色高度一致。

数据协议采用单线归零码的通讯方式，像素点在上电复位以后，S端接受从控制器传输过来的数据，首先送过来的24bit数据被第一个像素点提取后，送到像素点内部的数据锁存器。这个6812RGB通讯协议与驱动已经在底层封装好了，我们直接调用函数的接口就可以使用。



![image-20260421190014386](./media/image-20260421190014386.png) 



**实验器材**

| ![img](./media/wps189.jpg) | ![img](./media/wps190.jpg) | ![img](./media/wps191.jpg)       | ![img](./media/wps192.png) | ![img](./media/wps193.jpg) |
| -------------------------- | -------------------------- | -------------------------------- | -------------------------- | -------------------------- |
| Raspberry Pi Pico板*1      | Raspberry Pi Pico扩展板*1  | keyes DIY电子积木 6812 RGB模块*1 | 防反插3Pin*1               | MicroUSB线*1               |

 

**接线图**

![img](./media/wps194.jpg) 

 

**测试代码**

```c
/* 

 * Keyes Starter Kit for Raspberry Pi Pico

 * lesson 17

 * 6812 RGB LED

*/

#include"rgb.h"

 

RGB rgb(16,4);             //rgb(pin, num);  num = 0-100

///////////////////////////////////////////////////////////////////////////////////

void setup() {

 rgb.setBrightness(100);       //rgb.setBrightness(0-255);

 delay(10);

 rgb.clear();            //Turn off all leds  

 delay(10);

}

///////////////////////////////////////////////////////////////////////////////////

void loop() {

 while(1){  

  rgb.setPixelColor(0,255,0,0);    //rgb.setPixelColor(num,r,g,b);  num = 0-100

  rgb.setPixelColor(1,0,255,0);    //rgb.setPixelColor(num,r,g,b);  num = 0-100

  rgb.setPixelColor(2,0,0,255);    //rgb.setPixelColor(num,r,g,b);  num = 0-100

  rgb.setPixelColor(3,255,255,255);  //rgb.setPixelColor(num,r,g,b);  num = 0-100

  rgb.show();

  delay(1000);

 }

}
```

**代码说明**

这里使用到库函数![img](./media/wps195.jpg)，库函数的添加方法请查看第三章第四小节。

我们介绍下主要的几个函数接口及功能：

**RGB rgb(16,4);**这个函数用来初始化6812RGB，16为引脚号，4为灯珠数

**rgb.setBrightness(100);**这个函数用来设置6812RGB显示的亮度，范围是（0~255），值越大，灯珠越亮，如果我们没有设置亮度，那么默认255，也就是最亮。

**rgb.clear();**这个函数用来清除显示

**rgb.setPixelColor(****uint16_t n, uint8_t r, uint8_t g, uint8_t b****);**这个函数用来设置6812RGB的灯珠号也就是位置，及每颗灯珠的颜色。

**rgb.show();**这个函数用来设置显示6812RGB，是必要的，如果没有这条语句，灯珠将不刷新显示

 

**测试结果**

烧录好测试代码，按照接线图连接好线，上电后，我们可以看到模块上的四个灯珠分别亮红绿蓝白色，如下图所示。

![img](./media/wps196.png) 